package br.jsf;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import br.data.crud.CrudListas;
import br.data.model.Clientes;
import br.data.model.Listaprodutos;
import br.data.model.Listas;
import br.data.model.ListasPK;
import java.awt.Component;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;

/**
 *
 * @author thiago
 */
@ManagedBean
@SessionScoped
public class RFacesListas {

    /** Creates a new instance of RFacesListas */
    public RFacesListas() {
    }
    private ListasPK listasPK;
    private Date datafechamento = new br.util.utilitarios().getHoje();
    private Date dataabertura = new br.util.utilitarios().getHoje();
    private Clientes clientes;
    private br.data.model.Listaprodutos prodLista;
    private ArrayList<Listaprodutos> listaprodutosCollection = new java.util.ArrayList<Listaprodutos>();
    private int codigoCli;
    private int qtd;
    private int codPro;

    public int getCodPro() {
        return codPro;
    }

    public Listaprodutos getProdLista() {
        return prodLista;
    }

    public void setProdLista(Listaprodutos prodLista) {
        this.prodLista = prodLista;
    }

    public void setCodPro(int codPro) {
        this.codPro = codPro;
    }

    public int getQtd() {
        return qtd;
    }

    public void setQtd(int qtd) {
        this.qtd = qtd;
    }

    public int getCodigoCli() {
        return codigoCli;
    }

    public void setCodigoCli(int codigoCli) {
        this.codigoCli = codigoCli;
    }

    public Clientes getClientes() {
        return clientes;
    }

    public void setClientes(Clientes clientes) {
        this.clientes = clientes;
    }

    public java.util.Date getDataabertura() {
        return dataabertura;
    }

    public void setDataabertura(java.util.Date dtAbertura) {
        this.dataabertura = new br.util.utilitarios().formatDate(dtAbertura);
    }

    public java.util.Date getDatafechamento() {
        return datafechamento;
    }

    public void setDatafechamento(java.util.Date dtfechamento) {
        this.datafechamento = new br.util.utilitarios().formatDate(dtfechamento);
    }

    public ArrayList<Listaprodutos> getListaprodutosCollection() {
        return listaprodutosCollection;
    }

    public void setListaprodutosCollection(ArrayList<Listaprodutos> listaprodutosCollection) {
        this.listaprodutosCollection = listaprodutosCollection;
    }

    public ListasPK getListasPK() {
        return listasPK;
    }

    public void setListasPK(ListasPK listasPK) {
        this.listasPK = listasPK;
    }

    public java.util.Date getHoje() {
        return new br.util.utilitarios().getHoje();
    }

    public int getNovoCodigo(int CodigoCliente) {
        return new br.data.crud.CrudListas().getNovoCodigoLista(CodigoCliente);
    }

    public void setCodigoCliBean() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        RFacesUsers beanUsers = (RFacesUsers) facesContext.getApplication().createValueBinding("#{rFacesUsers}").getValue(facesContext);

        this.codigoCli = beanUsers.getCli().getCodigocli();
    }

    public java.util.Collection<br.data.model.Listas> getAll() {
        setCodigoCliBean();
        return new br.data.crud.CrudListas().getAll(codigoCli);
    }

    public java.util.Collection<br.data.model.Listaprodutos> getAllProdutos() {
        java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        int codCli = Integer.parseInt(params.get("codCli"));
        int codList = Integer.parseInt(params.get("codList"));

        ListasPK listPk = new ListasPK(codList, codCli);

        return new br.data.crud.CrudListaProdutos().getAll(listPk);
    }

    public java.util.ArrayList<br.data.model.Listaprecos> getAllLancamentos() {
        java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        int codCli = Integer.parseInt(params.get("codCli"));
        int codList = Integer.parseInt(params.get("codList"));

        ListasPK listPk = new ListasPK(codList, codCli);
        ArrayList<br.data.model.Listaprecos> tmp = new br.data.crud.CrudListaPrecos().getDistinctFornecedores(listPk);
        return tmp;
    }

    public java.util.Collection<br.data.model.Listas> getAllAbertas() {
        Collection<br.data.model.Listas> l = new br.data.crud.CrudListas().getListasAbertas();
        return l;
    }

    public String gerarNovaLista() {
        FacesMessage msg = null;
        try {
            if (dataabertura.after(datafechamento)) {
                return "";               
            } else {
                this.setCodigoCliBean();

                Listas list = new Listas();
                list.setDataabertura(dataabertura);
                list.setDatafechamento(datafechamento);
                list.setListasPK(new br.data.model.ListasPK(getNovoCodigo(codigoCli), codigoCli));
                list.setClientes(new br.data.crud.CrudClientes().getCliente(codigoCli));

                new br.data.crud.CrudListas().persist(list);
                return "cliente_cons_list.xhtml";
            }

        } catch (Exception e) {
            return "errorpage.xhtml";
        }

    }

    public void removerLista() {
        java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        int codCli = Integer.parseInt(params.get("codCli"));
        int codList = Integer.parseInt(params.get("codList"));

        br.data.model.Listas list = new CrudListas().getLista(new br.data.model.ListasPK(codList, codCli));

        new CrudListas().remove(list);
    }

    public String pagNovoProduto() {
        java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        int codCli = Integer.parseInt(params.get("codCli"));
        int codList = Integer.parseInt(params.get("codList"));

        br.data.model.ListasPK listPk = new br.data.model.ListasPK(codList, codCli);

        this.setListasPK(listPk);

        ArrayList<br.data.model.Listaprodutos> list = new ArrayList<Listaprodutos>(new br.data.crud.CrudListaProdutos().getAll(listPk));

        this.setListaprodutosCollection(list);

        return "cliente_ins_listaproduto.xhtml";
    }

    public void pagAddProduto() {
        try {
            java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

            codPro = Integer.parseInt(params.get("codPro"));

            br.data.model.Listaprodutos listProd = new br.data.model.Listaprodutos(listasPK.getCodigolist(), listasPK.getCodigocli(), codPro);
            listProd.setQtdrequerida(qtd);
            listProd.setProdutos(new br.data.crud.CrudProdutos().getProduto(codPro));
            boolean produtoEncontrado = false;
            for (br.data.model.Listaprodutos tmp : listaprodutosCollection) {
                if (tmp.getProdutos().getCodigoprod() == listProd.getProdutos().getCodigoprod()) {
                    int qtdTmp = tmp.getQtdrequerida();
                    tmp.setQtdrequerida(qtd + qtdTmp);
                    produtoEncontrado = true;
                }
            }
            if (!produtoEncontrado) {
                listaprodutosCollection.add(listProd);
            }
            qtd = 0;
        } catch (Exception e) {
        }

    }

    public void pagSalvarProdutos() {
        try {
            new br.data.crud.CrudListaProdutos().removeAll(listasPK);
            for (br.data.model.Listaprodutos prod : listaprodutosCollection) {
                new br.data.crud.CrudListaProdutos().persist(prod);
            }
            qtd = 0;
            listaprodutosCollection.clear();
            listaprodutosCollection = new ArrayList<Listaprodutos>();
        } catch (Exception e) {
        }

    }

    public void pagRemoverProduto() {
        java.util.Map<String, String> params = javax.faces.context.FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        int tempCodPro = Integer.parseInt(params.get("codPro"));
        br.data.model.Listaprodutos tempObjProd = new br.data.model.Listaprodutos();
        for (br.data.model.Listaprodutos prod : listaprodutosCollection) {
            if (prod.getProdutos().getCodigoprod() == tempCodPro) {
                tempObjProd = prod;
            }
        }
        listaprodutosCollection.remove(tempObjProd);
    }
}
